En el momento en que se necesita diseñar una aplicación móvil surgen distintas alternativas a nivel de desarrollo que van a condicionar fuertemente el diseño de la Experiencia de Usuario de dicha app.
En primera instancia se ha de considerar para qué plataforma se debe desarrollar la aplicación, o qué decisión se ha de tomar cuando se contempla el desarrollo para varias plataformas.
En la actualidad, las dos plataformas que lideran el mercado de los dispositivos móviles son: Android (de Google) e iOS (de Apple).
Paralelamente a la plataforma Android estándar (también conocida como «Stock Android»), han aparecido tres variantes:
Stock Android es la versión clásica, y admite personalizaciones fuertes por parte de los fabricantes, lo que dificulta las actualizaciones.
Android One es una variante de Android que no admite personalizaciones de fabricante, cuyo objetivo es que vaya fluido en dispositivos de gama media.
AndroidGo está específicamente diseñado para equipos muy pequeños, con un máximo de 1GB de RAM. El objetivo es extender una buena experiencia de usuario a dispositivos muy limitados, y aumentar cuota de mercado.
Android AOSP (Android Open Source Proyect) es la base de Android. Es el sistema operativo de código abierto que Google pone a disposición de cualquier persona que quiera acceder a él.
Entre los factores clave que intervienen en esta decisión se encuentran:
Presupuesto disponible.
Plazos para el desarrollo.
Público al que se destina la app.
Funcionalidad.

Las aplicaciones nativas se descargan de las tiendas de aplicaciones propias.
Se desarrollan de una forma concreta para una plataforma, no siendo reutilizables (un desarrollo para Android no sirve para iOS), aunque pueden tener un backend común.

Al estar desarrolladas para un sistema operativo específico, vienen fuertemente condicionadas por las especificaciones del sistema, debiendo seguir un proceso específico de desarrollo.
Otra característica de las apps nativas es que pueden usar todos los sensores del dispositivo.
La Experiencia de Usuario y el rendimiento son los mas óptimos.
Una de las desventajas son el aumentos de los costes de desarrollo.
Permite visualizar web en cualquier dispositivo, mejorando significativamente la Experiencia de Usuario y quedando asegurada la representación consistente de los contenidos para un elevadísimo porcentaje de dispositivos móviles existentes en el mercado, permitiendo que la app sea multiplataforma.
A efectos de codificación, en todas las aplicaciones Web se suelen utilizar tres tipos de elementos:
HTML, como lenguaje de contenidos.
Hojas de estilo CSS (Cascading Style Sheets), que permiten modelar y definir la representación de los contenidos.
JavaScript, como lenguaje para el control de las interacciones del usuario con los distintos elementos de la página.

Permiten el acceso a ciertos sensores.
Permite reutilizar el conocimiento de desarrolladores del ámbito Web, ya que no se diferencia gran cosa del modelo de desarrollo de aplicaciones web convencionales.
Se trata de juntar los puntos fuertes de las aplicaciones nativas y las mobile web.
Este modelo permite aprovechar el conocimiento de expertos en desarrollo Web y en diseño de la Experiencia de Usuario para la Web.
El único inconveniente es que suelen ser de gran tamaño, y su velocidad es menor que la de una app nativa.
Para afrontar el desarrollo de una aplicación móvil, tenemos que tener en cuenta los siguientes criterios:
Tiempo de desarrollo inicial.
Tiempo de desarrollo de nuevas funcionalidades.
Tiempo de ajuste de una nueva funcionalidad al diseño.
Experiencia del usuario.
Reutilización de código.
Sencillez para mantener el código.
Rendimiento de la aplicación.
Look & Feel de la aplicación.
Monetización.
Coste de desarrollo.
Una de las claves del éxito de cualquier aplicación móvil es la satisfacción del usuario ante la experiencia de uso de la aplicación.
El buen diseño de aplicaciones para el móvil tiene distintos componentes clave que modelan la experiencia de usuario móvil, como se puede ver en la siguiente figura:

Priorizar las características más relevantes.
Facilitar herramientas de interacción con el mundo físico.
Ofrecer determinadas características en todos los canales (Web, movil, tablet...).
Evitar ser de un solo uso.
Presentar los elementos mas importantes primero.
El diseño de la navegación deberá ser vertical.
Minimizar el número de toques.
Evitar que el usuario introduzca información.
Utilizar mecanismos descriptivos.
Simplificar el contenido presentado.
Dar control del usuario en el uso de contenido multimedia.
Optimizar imágenes y vídeos.
Evitar contenidos problemáticos.
No readaptar una web a un diseño móvil, sino repensar y rediseñar las aplicaciones.
Diseñar para proporcionar la información de forma rápida.
Mantener la coherencia visual en todos los canales de visualización.
Diferenciar siempre la orientación vertical y la horizontal.
Limitar la entrada a lo absolutamente esencial.
Mostrar valores por defecto siempre que sea posible.
Intentar usar la geolocalización.
Mostrar el teclado necesario en cada caso (Numérico o QWERTY).
Intentar guardar la información de sesión en el dispositivo.
Tener en cuenta el contexto de uso.
Usar todas las capacidades hardware.
Tener en cuenta las preferencias y ajustes.
Dejar claros elementos interactivos.
Fijar el tamaño correcto en elementos táctiles.
Seguir las guías de diseño oficiales.
Intentar ajustar las condiciones de visibilidad al momento del día.
Se debe hacer todo lo posible para que el usuario se sienta cómodo y confiado.
Solicitar solo los permisos estrictamente necesarios.
Evitar al usuario preocupaciones por la seguridad.
Evitar textos largos en los Términos y Condiciones.
Atraer la atención del usuario cuando sea necesario.
Minimizar el número de alertas y cuando se producen, con textos concisos y claros.
Ofrecer distintas opciones de asistencia.
Recomendable usar asistente (wizard).
Ofrecer múltiples canales de consulta.
Potenciar la participación social.
Generar contenidos con marca propia.
Explotar vías para encontrar la aplicación:
Códigos QR.
Posicionamiento SEO.
Etiquetas NFC.
Anuncios.